package org.baiyun.kaka.dao.impl;

import java.util.List;

import org.baiyun.kaka.dao.IVipDao;
import org.baiyun.kaka.entity.Vip;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;

@Repository//告诉系统，我这个是一个dao
public class VipDaoImpl extends BaseDaoImpl implements IVipDao {
    
	
	//实现findall方法
	public List<Vip> findAll() {
		// TODO 自动生成的方法存根
		//调用session的createQuery创建一个查询（从VIP实体里面查）;调用擦寻的List方法执行
		//cerateQuery：创建一个查询
		//执行查询
		return this.getCurrentSession().createQuery("from Vip").list();
	}
	
	@Override
	public Vip get(int id) { //目的是从数据库查一个实体 
		// TODO Auto-generated method stub
		//return (Vip) this.getCurrentSession().get(Vip.class, id);
	   Session session = this.getCurrentSession();//得到了数据库连接
	   return(Vip) session.get(Vip.class, id);//相当于给我一个表名，一个具体的数据的id
	}
	@Override
	public boolean save(Vip vip) {
		// TODO Auto-generated method stub
		Session session = this.getCurrentSession();//得到数据的连接
		int ret = (int) session.save(vip); //调用连接的保存方法，把数据保存到数据库
		return ret >0;  //判断保存后的返回值是否是大于0，如果大于0说明保存成功
	}
	
	@Override
	public boolean delete(int id) {
		Session session = this.getCurrentSession();//得到数据的连接
		Vip vip=this.get(id);//根据查询数据的方法，去数据库查询id为指定值的记录，如果有，vip变量就有值
		
		if(vip!=null) { //如果数据库中有这个记录
		session.delete(vip); //干掉：调用hibernate给我们提供的方法
		return true;      //返回成功了
		}else {
			return false;  //返回失败
		}
		
		/*Vip vip = new Vip(); //新建vip对象
		vip.setId(id);	
		
		return true;*/
	}
	@Override
	public boolean update(Vip vip) {
		// TODO Auto-generated method stub
		Session session = this.getCurrentSession();//得到数据的连接
		//查询数据在不在数据库里面
		Vip vipInDB = this.get(vip.getId());
		//判断一下vipInDB是不是为空
		if (vipInDB==null) {
			return false;
		}else {
			//判断传进来的数据的字段，需要排除掉为空的字段，只修改那些不为空的字段
			if (vip.getName()!=null) {
				vipInDB.setName(vip.getName());
			}
			if (vip.getReduce()!=null) {
				vipInDB.setReduce(vip.getReduce());
			}
			
			
			
			session.update(vipInDB);//调用hibernate的方法修改数据
			
			return true;
		}
		
	}

}
